import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 *
 * @author su.gd
 * @date 2023-11-17
 */
public class FreemarkerTest2 {
    public static void main(String[] args) throws IOException, TemplateException {
        // 第一步：创建一个Configuration对象，直接new一个对象。构造方法的参数就是FreeMarker对于的版本号。
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_32);

        // 第二步：设置模板文件所在的路径。
        String projectPath = System.getProperty("user.dir");
        configuration.setDirectoryForTemplateLoading(new File(projectPath + "/code-generator-basic/src/main/resources/templates"));

        // 第三步：设置模板文件使用的字符集。一般就是utf-8.
        configuration.setDefaultEncoding("utf-8");

        // todo 补充：修改输出的数字，没有逗号分隔
        configuration.setNumberFormat("0.######"); // now it will print 1000000

        // 第四步：加载一个模板，创建一个模板对象。
        Template template = configuration.getTemplate("myweb.html.ftl");

        // 第五步：创建一个模板使用的数据集，可以是pojo也可以是map。一般是Map。
        HashMap<String, Object> dataModel = new HashMap<>();

        // 存放 list 数据
        ArrayList<HashMap<String, String>> menuItems = new ArrayList<>();

        HashMap<String, String> item = new HashMap<>();
        item.put("url", "www.baidu.com");
        item.put("label", "百度111");

        HashMap<String, String> item2 = new HashMap<>();
        item2.put("url", "www.sougou.com");
        item2.put("label", "搜狗");

        menuItems.add(item);
        menuItems.add(item2);
        dataModel.put("menuItems", menuItems);

        // 存放 字符串数据
        dataModel.put("currentYear", 2023);


        // 第六步：创建一个Writer对象，一般创建一FileWriter对象，指定生成的文件名。
        // 注意 new File(/hello.html) --> 将这个文件生成到 该项目所在的根目录的文件下
        // 注意 new File(projectPath, "/hello.html") --> 将这个文件生成到 该项目的根目录文件下
        Writer out = new FileWriter(new File(projectPath, "/hello.html"));

        // 第七步：调用模板对象的process方法输出文件。
        template.process(dataModel, out);

        // 第八步：关闭流。
        out.close();
    }
}
